package br.com.cicero.notasfiscais.interceptor;

import java.io.Serializable;

import javax.inject.Inject;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;
import javax.persistence.EntityManager;

import br.com.cicero.notasfiscais.annotation.Transacional;

@Interceptor 
@Transacional
public class TransactionInterceptor implements Serializable {
	
	@Inject
	private EntityManager em;
	
	@AroundInvoke
	public Object intercept(InvocationContext ctx) throws Exception {
		System.out.println("Abrindo a transação");
		em.getTransaction().begin();
		
		// Passando para o JSF tratar a requisicao e pegando o retorno da logica
		Object resultado = ctx.proceed();
		
		em.getTransaction().commit();
		System.out.println("Commitando a transação");
		
		return resultado;
	}

}
